#ifndef CVAGASITEM_H
#define CVAGASITEM_H

#include <QObject>
#include <QHash>
#include <QDate>
#include <QVariant>
#include "cvagasitemdadocontato.h"

class CVagasItem : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString cidade READ getCidade NOTIFY dataChanged)
    Q_PROPERTY(QString estado READ getEstado NOTIFY dataChanged)
    Q_PROPERTY(QDate dataVaga READ getData NOTIFY dataChanged)
    Q_PROPERTY(QString cargo READ getCargo NOTIFY dataChanged)
    Q_PROPERTY(QString descricao READ getDescricao NOTIFY dataChanged)
    Q_PROPERTY(QString empresa READ getEmpresa NOTIFY dataChanged)
    Q_PROPERTY(QString contato READ getContato NOTIFY dataChanged)
    Q_PROPERTY(QString subjectEmail READ getSubjectEmail NOTIFY dataChanged)
    Q_PROPERTY(int codigoVaga READ getCodigo NOTIFY dataChanged)
    Q_PROPERTY(bool marcado READ getMarcado NOTIFY dataChanged)
    Q_PROPERTY(bool vagaNova READ getVagaNova NOTIFY dataChanged)
    Q_PROPERTY(CVagasItemDadoContato *infoContato READ getInfoContato NOTIFY dataChanged)

public:
    enum Roles {
        cidadeRole = Qt::UserRole + 1,
        estadoRole,
        dataRole,
        cargoRole,
        descricaoRole,
        empresaRole,
        contatoRole,
        subjectRole,
        codigoRole,
        marcadoRole,
        vagaNovaRole,
        infoContatoRole
    };

    explicit CVagasItem(QObject *parent = 0);
    static QHash<int, QByteArray> roleNames();

    QVariant dados(int role);

    static CVagasItem *Clone(CVagasItem *outro);

    void AtualizarDadosContato(QDateTime dataContato);

    //gets
    inline QString getCidade() { return _cidade; }
    inline QString getEstado() { return _estado; }
    inline QDate getData() { return _data; }
    inline QString getCargo() { return _cargo; }
    inline QString getDescricao() { return _descricao; }
    inline QString getEmpresa() { return _empresa; }    
    inline QString getContato() { return _contato; }
    inline QString getSubjectEmail() { return _subjectEmail; }
    inline int getCodigo() { return _codigo; }
    inline bool getMarcado() { return _marcado; }
    inline bool getVagaNova() { return _vagaNova; }
    inline CVagasItemDadoContato * getInfoContato() { return _infoContato; }

    //sets
    inline void setCidade(const QString &v) {
        _cidade = v;
        emit dataChanged();
    }
    inline void setEstado(const QString &v)  {
        _estado = v;
        emit dataChanged();
    }
    inline void setData(const QDate &v) {
        _data = v;
        emit dataChanged();
    }
    inline void setCargo(const QString &v) {
        _cargo = v;
        emit dataChanged();
    }
    inline void setDescricao(const QString &v) {
        _descricao = v;
        emit dataChanged();
    }
    inline void setEmpresa(const QString &v) {
        _empresa = v;
        emit dataChanged();
    }
    inline void setContato(const QString  &v) {
        _contato = v;
        emit dataChanged();
    }
    inline void setSubjectEmail(const QString &v) {
        _subjectEmail = v;
        emit dataChanged();
    }
    inline void setCodigo(int v) {
        _codigo = v;
        emit dataChanged();
    }

    inline void setMarcado(bool marcado) {
        _marcado = marcado;
        emit dataChanged();
    }

    inline void setVagaNova(bool nova) {
        _vagaNova = nova;
        emit dataChanged();
    }

    inline void setInfoContato(CVagasItemDadoContato *infoContato)
    {
        _infoContato = infoContato;
        emit dataChanged();
    }

private:
    QString _cidade, _estado, _cargo, _descricao, _empresa, _contato, _subjectEmail;
    QDate _data;
    int _codigo;
    bool _marcado, _vagaNova;
    CVagasItemDadoContato *_infoContato;

signals:
    void dataChanged();

public slots:
    void resetarVagaContatada();

};

#endif // CVAGASITEM_H
